内容由 AI 生成
#蓉易创项目
## 重要提示,不可违反
1. 全程使用中文!
2. 不要修改和你无关的代码!
3. 修改任何功能都先对应查询对应模块的功能要求!
4. 所有新增、编辑页面都是公用一个页面。
5. 每个实体类都有对应的Input类型,id=null 就表示新增。id !=null 就表示修改。
6. user 关联的头像, activity关联的视频图片,carousel 关联的视频和图像,都对应 t_media 数据表,实体类Media . 通过Target
## 需求描述
学员登录小程序,点击报名,录入报名信息,工作人员审核报名资料。 评委评审报名资料,安装比赛对应的评分表给学员打分,并给出评论。
## web需求
1. 登录页面, 手机号和密码登录。同时预留 微信扫描登录。
2. 登录后首页是标准的工作台模板样式
2.1 左边是菜单栏目 包括:比赛管理,评委管理,评分模板。参赛人员,新闻与推广。 员工管理
2.2 右边是工作区,首页显示 当前进行比赛, 参赛人数,报名待审核人数。
3. 比赛管理
3.1 比赛列表
3.1.1 上面查询框,可以按名称查询,
3.1.2 右边是【新增比赛】
3.1.2 下面是比赛列表展示:名称,报名人数,比赛时间,报名截至时间。
3.1.2 后面又 查看选手,编辑,删除等操作。
3.2 比赛详情:
3.2.1 名称, 最大长度限制,小于30个字符
3.2.2 报名截至日期 ,通过日历选择
3.2.3 比赛开始时间, 年月日 和时分。
3.3.4 比赛地址。
3.3.5 最大参赛人数
3.3.5 比赛描述
3.3.6 选择评分模板
3.3.7. 选择视频和图片。 参考:设计要点 部分
3.3.7 比赛阶段定义
重要! 比赛阶段和比赛公用一个实体类和数据表(t_activity) .通过pid 关联。
3.3.7.1 名称, 最大长度限制,小于30个字符
3.3.7.2 比赛开始时间, 年月日 和时分。
3.3.7.3 比赛地址。
3.3.7.4 最大参赛人数
3.3.7.5 比赛描述
3.3.7.6 选择评分模板,默认是比赛的模板,也可以单独选择。
3.3.7.7 列表右边是 查看选手, 编辑,删除等操作
4.评委管理 对应 Judge
4.1 评委列表 显示 头像,名称,专业标签, 电话, 性别
4.2 评委详情: 名称,头像, 性别,专业标签,可以多选, 专业标签参考【设计要点第3点】,详情。
4. 评分模管理 对应 RatingScheme
4.1 评分模板列表。 名称, 总分。
4.2 评分模板详情: 名称, 下面是评分条目列表, 可以新增和删除,(已经绑定到比赛的不能删除)。 评分条目包括 名称和分值。
5. 学员管理
5.1 学员列表 显示头像,名称,报名的比赛, 申请时间。
5.2 学员详情页面: 名称,头像,电话,
5.2.1 学员详情页面的 比赛列表:
1.下面列表是参加报名的比赛(一个参赛人可以报名参加多个比赛),包括比赛名称和当前状态。 状态包括:带审核,进行中、 得分,名次等信息。
2. 得分,名次信息在比赛结束后不可修改!
3. activityPlayer的状态:0:删除, 1:待审核,2:进行中(审核通过), 3:结束。
6. 新闻 对应carousel
6.1 新闻列表 名称,创建时间。
6.2 新闻播放 对应 t_carousel_sort , 查询按钮后面有一个 按钮 【设置播放】, 点击到一个设置页面,上面是个查询框,下面是个列表,列表后面是播放顺序设置.
6.2 新闻详情 :名称,内容, 视频和图片 设置播放顺序
7. 权限角色。
采用标准的RBC模型
但是角色内置,不可修改和编辑: 学员,平台,评委,管理员。
8. 专业标签管理
8.1 专业标签列表, 可以新增标签, 新增的标签code 默认采用名称。
9. 发生消息类别
9.1 显示所有已经发生的消息。
## 微信端
暂时留空
## 设计要点
1. 列表通用设计: 都有查询, 新增
2. user的头像, player的头像, activity 的视频和图片,activiityPlayer 关联的报名人上传的资料,judge的头像, employee的头像,,carousel 的视频和图像的路径都记录在t_media表内。 通过TargetType区别
定义一个枚举类型要包括上述的类型。
3. 标签Tag 对应t_tag 表, 里面通过category 来区分不同的标签类型。比如:专业标签的category = 'major'.
## 环境配置
1. 开发环境是windows ,命令行是powersehll. 不要搞错了!
2. java 25 的目录在 : C:\Program Files\Java\jdk-25
3.
##技术规范
1. 目录规范:
根目录下分backend(后台)、web(预留前端)、wx(小程序),backend内部按模块划分,结构如下:重点:每个业务模块都包括api, dto, entity, service,repository 等目录!!!
backend/src/main/java/com/rongyichuang/
├── config/ # 配置类(RabbitMQ、GraphQL、跨域等)
├── judge/ # 评委模块
│ ├── api/ # GraphQL接口(如JudgeGraphqlApi)
│ ├── entity/ # 实体类(如Judge.java)
│ ├── dto/ # 数据传输对象(request/response)
│ ├── service/ # 业务类(如JudgeService.java,无接口)
│ └── util/ # 模块内工具类
├── rating/ # 评分模板模块(结构同judge)
├── activity/ # 比赛模块(结构同judge)
├── player/ # 参赛人员模块(结构同judge)
├── carousel/ # 轮播图模块(结构同judge)
├── employee/ # 平台员工模块(结构同judge)
└── common/ # 公共模块
├── entity/ # 基础实体(如BaseEntity.java,含id/state)
├── dto/ # 公共DTO(如PageRequest.java)
├── exception/ # 全局异常处理(如GlobalExceptionHandler.java)
└── util/ # 全局工具类(如DateUtil.java)
2. **Grpahqls文件放在 resources\graphqls目录下面, 每个模块对应一个graphqls文件。
3. spring security +token
4. **事务控制**:service核心方法(如评委评分、学员审核)添加@Transactional,确保数据一致性。
5. **逻辑删除**:所有实体类含state字段(int(1),默认1),JPA父接口加@Where(clause = "state = 1"),查询自动过滤已删除数据。 注意:activityPlayer 的satate 含义和其它的不同
6. 视频,图片直接上传到腾讯云存储桶里面
7. 存储桶目录,按yyyyMMyy 设置目录,每天的资源都放在对应的目录下。
##资源
### 3.4 数据库连接信息
- 类型:mysql
- IP:140.143.152.226
- 端口:3308
- 数据库:ryc
- 用户名:openai
- 密码:Xml@uk2025
### 3.5 RabbitMQ连接信息
rabbitmq:
host: 140.143.152.226
port: 5672
virtual-host: ryc_prod
username: admin
password: ycl@2020
connection-timeout: 15000
### 云存储信息
SecretId: 'AKIDZ4Pcj9zbgaZgl6yJf0HSXXHzfGl9PcdT',
SecretKey: 'qjYFnCas0xseEdsxrsobKuJiwzrZ7dzC',
Bucket: 'ryc-1256886520',
Region: 'ap-chengdu'
- 类型:mysql
- IP:140.143.152.226
- 端口:3308
- 数据库:ryc
- 用户名:openai
- 密码:Xml@uk2025
### 3.5 RabbitMQ连接信息
rabbitmq:
host: 140.143.152.226
port: 5672
virtual-host: ryc_prod
username: admin
password: ycl@2020
connection-timeout: 15000
### 云存储信息
SecretId: 'AKIDZ4Pcj9zbgaZgl6yJf0HSXXHzfGl9PcdT',
SecretKey: 'qjYFnCas0xseEdsxrsobKuJiwzrZ7dzC',
Bucket: 'ryc-1256886520',
Region: 'ap-chengdu'
把这个文档 整理规范一下,尤其标题和序号,还有缩进。
蓉易创项目
一、重要提示(不可违反)
全程使用中文!
不要修改和你无关的代码!
修改任何功能都先对应查询对应模块的功能要求!
所有新增、编辑页面都是公用一个页面。
每个实体类都有对应的Input类型,id=null 就表示新增;id !=null 就表示修改。
user 关联的头像、activity关联的视频图片、carousel 关联的视频和图像,都对应 t_media 数据表(实体类Media),通过Target关联。
二、需求描述
学员登录小程序,点击报名,录入报名信息,工作人员审核报名资料;评委评审报名资料,按照比赛对应的评分表给学员打分,并给出评论。
2.1 Web需求
2.1.1 登录页面
支持手机号和密码登录;
预留微信扫描登录入口。
2.1.2 登录后首页(标准工作台模板样式)
左侧:菜单栏目,包含「比赛管理」「评委管理」「评分模板」「参赛人员」「新闻与推广」「员工管理」;
右侧:工作区,首页显示「当前进行比赛」「参赛人数」「报名待审核人数」。
2.1.3 比赛管理(对应实体类:Activity)
2.1.3.1 比赛列表
顶部:查询框(支持按比赛名称查询);
右侧:【新增比赛】按钮;
列表展示字段:名称、报名人数、比赛时间、报名截至时间;
列表操作项:查看选手、编辑、删除。
2.1.3.2 比赛详情
名称(最大长度限制:小于30个字符);
报名截至日期(通过日历选择);
比赛开始时间(精确到年月日时分);
比赛地址;
最大参赛人数;
比赛描述;
选择评分模板;
选择视频和图片(参考「四、设计要点」部分);
比赛阶段定义(重要:比赛阶段和比赛公用一个实体类和数据表t_activity,通过pid关联):
阶段名称(最大长度限制:小于30个字符);
阶段比赛开始时间(精确到年月日时分);
阶段比赛地址;
阶段最大参赛人数;
阶段比赛描述;
选择评分模板(默认继承比赛模板,支持单独选择);
阶段列表操作项:查看选手、编辑、删除。
2.1.4 评委管理(对应实体类:Judge)
2.1.4.1 评委列表
列表展示字段:头像、名称、专业标签、电话、性别。
2.1.4.2 评委详情
基础信息:名称、头像、性别、专业标签(支持多选,参考「四、设计要点第3点」)、详情描述。
2.1.5 评分模板管理(对应实体类:RatingScheme)
2.1.5.1 评分模板列表
列表展示字段:名称、总分。
2.1.5.2 评分模板详情
基础信息:模板名称;
评分条目管理:支持新增、删除评分条目(已绑定到比赛的模板不可删除);
评分条目字段:名称、分值。
2.1.6 学员管理(对应实体类:Player)
2.1.6.1 学员列表
列表展示字段:头像、名称、报名的比赛、申请时间。
2.1.6.2 学员详情页面
基础信息:名称、头像、电话;
参赛记录列表(一个学员可报名多个比赛):
列表展示字段:比赛名称、当前状态;
状态说明:0-删除、1-待审核、2-进行中(审核通过)、3-结束;
特殊规则:得分、名次信息在比赛结束后不可修改。
2.1.7 新闻管理(对应实体类:Carousel)
2.1.7.1 新闻列表
列表展示字段:名称、创建时间。
2.1.7.2 新闻播放设置(对应表:t_carousel_sort)
操作入口:查询按钮右侧【设置播放】按钮;
设置页面:顶部查询框,下方列表(列表操作项:设置播放顺序)。
2.1.7.3 新闻详情
基础信息:名称、内容;
媒体设置:视频和图片配置;
播放设置:定义播放顺序。
2.1.8 权限角色
采用标准RBC模型;
角色规则:内置角色(不可修改/编辑),包括「学员」「平台」「评委」「管理员」。
2.1.9 专业标签管理(对应表:t_tag)
2.1.9.1 专业标签列表
支持功能:新增标签;
默认规则:新增标签的code默认与名称一致。
2.1.10 发送消息类别
功能:展示所有已发送的消息。
2.2 微信端
暂时留空
三、环境配置
开发环境:Windows,命令行工具:PowerShell;
JDK配置:Java 25,安装目录:C:\Program Files\Java\jdk-25。
四、设计要点
列表通用设计:所有列表页面均包含「查询」「新增」功能;
媒体资源存储规则:
用户头像(user)、选手头像(player)、比赛媒体(activity的视频/图片)、参赛报名资料(activiityPlayer)、评委头像(judge)、员工头像(employee)、新闻媒体(carousel的视频/图片),均存储于t_media表;
通过「TargetType」枚举区分资源类型(需定义包含上述所有类型的枚举);
标签管理规则:
标签存储于t_tag表,通过「category」字段区分标签类型(例:专业标签的category = 'major')。
五、技术规范
5.1 目录规范
根目录下分backend(后台)、web(预留前端)、wx(小程序),backend内部按模块划分,结构如下:
plaintext
backend/src/main/java/com/rongyichuang/
├── config/ # 配置类(RabbitMQ、GraphQL、跨域等)
├── judge/ # 评委模块
│ ├── api/ # GraphQL接口(如JudgeGraphqlApi)
│ ├── entity/ # 实体类(如Judge.java)
│ ├── dto/ # 数据传输对象(request/response)
│ ├── service/ # 业务类(如JudgeService.java,无接口)
│ └── util/ # 模块内工具类
├── rating/ # 评分模板模块(结构同judge)
├── activity/ # 比赛模块(结构同judge)
├── player/ # 参赛人员模块(结构同judge)
├── carousel/ # 轮播图模块(结构同judge)
├── employee/ # 平台员工模块(结构同judge)
└── common/ # 公共模块
├── entity/ # 基础实体(如BaseEntity.java,含id/state)
├── dto/ # 公共DTO(如PageRequest.java)
├── exception/ # 全局异常处理(如GlobalExceptionHandler.java)
└── util/ # 全局工具类(如DateUtil.java)
5.2 GraphQL配置
Graphqls文件统一放在 resources\graphqls 目录,每个业务模块对应一个graphqls文件。
5.3 安全框架
采用Spring Security + Token实现身份认证与授权。
5.4 事务控制
service层核心方法(如评委评分、学员审核)需添加@Transactional注解,确保数据一致性。
5.5 逻辑删除
所有实体类需包含state字段(类型:int(1),默认值:1);
JPA父接口需添加@Where(clause = "state = 1"),查询时自动过滤已删除数据;
特殊说明:activityPlayer的state含义与其他实体不同(参考2.1.6.2状态说明)。
5.6 云存储规范
存储目标:视频、图片直接上传至腾讯云存储桶;
目录规则:按「yyyyMMdd」格式创建目录,当日资源存入对应目录。
六、资源信息
6.1 数据库连接信息(MySQL)
类型:MySQL
IP:140.143.152.226
端口:3308
数据库名:ryc
用户名:openai
密码:Xml@uk2025
6.2 RabbitMQ连接信息
yaml
rabbitmq:
host: 140.143.152.226
port: 5672
virtual-host: ryc_prod
username: admin
password: ycl@2020
connection-timeout: 15000
6.3 腾讯云存储信息
SecretId: AKIDZ4Pcj9zbgaZgl6yJf0HSXXHzfGl9PcdT
SecretKey: qjYFnCas0xseEdsxrsobKuJiwzrZ7dzC
Bucket: ryc-1256886520
Region: ap-chengdu
能改成md格式吗
以下是完全遵循 Markdown(MD)规范 整理的「蓉易创项目」文档,包含标准标题层级、列表缩进、代码块、重点加粗等格式,可直接复制使用:
蓉易创项目
一、重要提示(不可违反)
全程使用中文!
不要修改和你无关的代码!
修改任何功能都先对应查询对应模块的功能要求!
所有新增、编辑页面都是公用一个页面。
每个实体类都有对应的 Input 类型:id=null 表示新增,id≠null 表示修改。
关联媒体资源规则:
user 关联的头像、activity 关联的视频 / 图片、carousel 关联的视频 / 图像,均对应 t_media 数据表(实体类:Media);
通过 Target 字段关联区分。
二、需求描述
学员登录小程序 → 点击报名并录入报名信息 → 工作人员审核报名资料 → 评委评审资料,按比赛对应评分表给学员打分并填写评论。
三、Web 端需求
3.1 登录页面
核心功能:支持「手机号 + 密码」登录;
预留功能:微信扫码登录入口。
3.2 登录后首页(标准工作台模板)
区域 内容描述
左侧菜单 包含「比赛管理」「评委管理」「评分模板」「参赛人员」「新闻与推广」「员工管理」
右侧工作区 展示核心数据:当前进行比赛、参赛总人数、报名待审核人数
3.3 比赛管理(实体类:Activity)
3.3.1 比赛列表
顶部功能:查询框(支持按「比赛名称」模糊查询)、【新增比赛】按钮;
列表字段:比赛名称、报名人数、比赛时间、报名截至时间;
操作列:查看选手、编辑、删除。
3.3.2 比赛详情
基础信息配置:
比赛名称(最大长度≤30 字符);
报名截至日期(日历组件选择);
比赛开始时间(精确到「年月日 时分」);
比赛地址、最大参赛人数、比赛描述;
关联配置:选择评分模板、上传视频 / 图片(参考「五、设计要点」)。
比赛阶段定义(重要):
数据关联:比赛阶段与比赛共用 t_activity 表,通过 pid 关联(父 ID 为比赛 ID);
阶段配置项:
阶段名称(最大长度≤30 字符);
阶段开始时间(精确到「年月日 时分」);
阶段地址、阶段最大参赛人数、阶段描述;
评分模板(默认继承比赛模板,支持单独选择);
阶段列表操作:查看选手、编辑、删除。
3.4 评委管理(实体类:Judge)
3.4.1 评委列表
展示字段:头像、评委名称、专业标签、联系电话、性别。
3.4.2 评委详情
基础信息:评委名称、头像、性别、联系电话;
标签配置:专业标签(支持多选,参考「五、设计要点 3」);
补充信息:评委详情描述。
3.5 评分模板管理(实体类:RatingScheme)
3.5.1 评分模板列表
展示字段:模板名称、模板总分。
3.5.2 评分模板详情
基础配置:模板名称;
条目管理:
支持「新增 / 删除」评分条目(已绑定比赛的模板不可删除);
条目字段:条目名称、条目分值。
3.6 学员管理(实体类:Player)
3.6.1 学员列表
展示字段:学员头像、学员名称、报名的比赛名称、申请时间。
3.6.2 学员详情
基础信息:学员名称、头像、联系电话;
参赛记录列表(1 个学员可报多个比赛):
展示字段:比赛名称、当前状态;
状态说明:0-删除、1-待审核、2-进行中(审核通过)、3-结束;
特殊规则:比赛结束后,「得分」「名次」不可修改。
3.7 新闻管理(实体类:Carousel)
3.7.1 新闻列表
展示字段:新闻名称、创建时间。
3.7.2 新闻播放设置(关联表:t_carousel_sort)
操作入口:列表查询按钮右侧 → 【设置播放】按钮;
设置页面:
顶部:新闻查询框;
下方:新闻列表,操作列支持「设置播放顺序」。
3.7.3 新闻详情
内容配置:新闻名称、新闻正文;
媒体配置:上传新闻关联的视频 / 图片;
播放配置:设置视频 / 图片的播放顺序。
3.8 权限角色
模型:采用标准 RBC(基于角色的访问控制)模型;
角色规则:内置 4 类角色(不可修改 / 编辑):学员、平台人员、评委、管理员。
3.9 专业标签管理(关联表:t_tag)
3.9.1 专业标签列表
支持功能:新增专业标签;
默认规则:新增标签的 code 与标签名称一致。
3.10 消息管理
功能:展示所有已发送的系统消息(含消息内容、发送时间、接收对象等)。
四、微信端需求
暂时留空
五、设计要点
列表通用规则:所有模块的列表页面,均需包含「查询」「新增」功能;
媒体资源存储(关联表:t_media):
覆盖场景:user 头像、player 头像、activity 视频 / 图片、activityPlayer 报名资料、judge 头像、employee 头像、carousel 视频 / 图片;
区分规则:通过 TargetType 枚举区分资源类型(需定义包含上述所有场景的枚举);
标签管理(表:t_tag):
区分规则:通过 category 字段区分标签类型(例:专业标签的 category = 'major')。
六、环境配置
开发环境:Windows 系统,命令行工具:PowerShell;
JDK 配置:Java 25,安装路径:C:\Program Files\Java\jdk-25。
七、技术规范
7.1 目录规范
根目录按「端 / 模块」拆分,backend 内部按「业务模块」划分,结构如下:
plaintext
backend/src/main/java/com/rongyichuang/
├── config/ # 全局配置(RabbitMQ、GraphQL、跨域等)
├── judge/ # 评委模块
│ ├── api/ # GraphQL接口(如JudgeGraphqlApi.java)
│ ├── entity/ # 实体类(如Judge.java)
│ ├── dto/ # 数据传输对象(分request/response子目录)
│ ├── service/ # 业务逻辑(如JudgeService.java,无单独接口层)
│ └── util/ # 模块内工具类
├── rating/ # 评分模板模块(结构同judge)
├── activity/ # 比赛模块(结构同judge)
├── player/ # 参赛人员模块(结构同judge)
├── carousel/ # 轮播图(新闻)模块(结构同judge)
├── employee/ # 平台员工模块(结构同judge)
└── common/ # 公共模块
├── entity/ # 基础实体(如BaseEntity.java,含id/state)
├── dto/ # 公共DTO(如PageRequest.java)
├── exception/ # 全局异常处理(如GlobalExceptionHandler.java)
└── util/ # 全局工具类(如DateUtil.java)
7.2 GraphQL 配置
文件路径:resources/graphqls/;
命名规则:每个业务模块对应 1 个 graphqls 文件(例:评委模块 → judge.graphqls)。
7.3 安全框架
采用 Spring Security + Token 实现身份认证与接口授权。
7.4 事务控制
作用范围:service 层核心业务方法(如评委评分、学员审核);
实现方式:添加 @Transactional 注解,确保数据一致性。
7.5 逻辑删除
通用规则:所有实体类含 state 字段(类型:int (1),默认值:1);
查询过滤:JPA 父接口添加 @Where(clause = "state = 1"),自动过滤已删除数据;
特殊说明:activityPlayer 的 state 含义与其他实体不同(参考 3.6.2 状态说明)。
7.6 云存储规范
存储目标:视频、图片上传至「腾讯云存储桶」;
目录规则:按「yyyyMMdd」(年月日)创建目录,当日资源存入对应目录。
八、资源信息
8.1 数据库连接(MySQL)
参数 配置值
类型 MySQL
IP 140.143.152.226
端口 3308
数据库名 ryc
用户名 openai
密码 Xml@uk2025
8.2 RabbitMQ 连接
yaml
rabbitmq:
host: 140.143.152.226
port: 5672
virtual-host: ryc_prod
username: admin
password: ycl@2020
connection-timeout: 15000
8.3 腾讯云存储(COS)
SecretId:AKIDZ4Pcj9zbgaZgl6yJf0HSXXHzfGl9PcdT
SecretKey:qjYFnCas0xseEdsxrsobKuJiwzrZ7dzC
Bucket:ryc-1256886520
Region:ap-chengdu
如果要用这个来做开发,尤其是让AI 来做开发,还需要细化那些内容
要让 AI 基于这份文档高效开发,需要从「实体定义、业务流程、技术细节、接口规范」等维度进行细化,补充 AI 开发所需的「确定性信息」(避免歧义)和「约束规则」(明确边界)。以下是需要重点细化的内容:
一、核心实体类与数据库表结构(必须细化)
当前文档仅提到实体类名称(如 Judge、Activity),但缺少字段定义、数据类型、约束关系,AI 无法生成实体类和表结构。需补充:
1. 实体类字段明细(含数据库映射)
示例(以Activity为例):
实体字段名 数据库字段名 数据类型 约束规则(非空 / 长度 / 默认值) 说明
id id bigint 主键,自增,非空 比赛 ID
name name varchar(30) 非空,长度≤30 比赛名称
enrollEndTime enroll_end_time datetime 非空 报名截止时间
startTime start_time datetime 非空 比赛开始时间(精确到时分)
address address varchar(255) 可为空 比赛地址
maxPlayerCount max_player_count int 非空,默认 0,≥0 最大参赛人数
description description text 可为空 比赛描述
ratingSchemeId rating_scheme_id bigint 可为空(关联 RatingScheme.id) 关联的评分模板 ID
pid pid bigint 默认为 0(0 表示比赛,≠0 表示阶段) 父 ID(关联自身 id,用于阶段)
state state tinyint 非空,默认 1(1 - 正常,0 - 删除) 逻辑删除标识
需按此格式补充所有实体类(Judge、RatingScheme、Player、Media、Tag 等)。
2. 表关系与外键约束
明确表之间的关联规则,例如:
t_activity(比赛 / 阶段)的pid外键关联自身的id(自关联);
t_rating_scheme_item(评分条目)的scheme_id外键关联t_rating_scheme的id;
t_media的target_id关联对应实体的id(如 user 的 id、activity 的 id),target_type枚举值需明确(如USER_AVATAR=1、ACTIVITY_VIDEO=2)。
二、业务流程与状态流转(关键细化)
当前文档仅描述功能点,缺少流程步骤、状态触发条件,AI 无法实现业务逻辑。需补充:
1. 核心流程步骤
示例(学员报名 - 审核 - 评分流程):
学员报名:
输入:学员 ID、比赛 ID、报名资料(关联 t_media 的资源 ID);
校验:比赛是否在报名期内(当前时间≤enrollEndTime)、是否已达最大人数;
输出:生成 ActivityPlayer 记录(state=1 - 待审核)。
工作人员审核:
操作:审核通过 / 拒绝;
触发条件:仅管理员 / 平台角色可操作;
状态变更:通过→state=2(进行中);拒绝→state=0(删除,或新增 reject_reason 字段);
通知:审核结果通过 RabbitMQ 发送消息给学员(需明确消息格式)。
评委评分:
权限:评委只能给已关联的比赛 / 阶段打分(需新增judge_activity关联表);
输入:选手 ID、评分条目得分(每个条目得分≤条目分值)、评论;
校验:总分≤模板总分;
结果:比赛结束后自动计算平均分(或取去掉最高 / 最低分的规则),更新选手的score和rank(名次)。
2. 状态流转规则
明确所有状态字段的变更条件,例如:
ActivityPlayer.state流转:1-待审核→2-进行中(审核通过)→3-结束(比赛结束);
Activity.state流转:1-正常→0-删除(仅管理员可操作,且已结束的比赛才能删除)。
三、接口规范(GraphQL 细化)
当前仅提到 “每个模块对应一个 graphqls 文件”,但缺少查询 / 变更操作的参数、返回值、权限控制,AI 无法生成接口。需补充:
1. 查询操作(Query)
示例(比赛列表查询):
graphql
type Query {
# 比赛列表查询
activityList(
name: String # 名称模糊查询
page: Int! # 页码,默认1
size: Int! # 每页条数,默认10
): PageResult! # 返回分页结果(含总条数、列表数据)
}
# 分页结果结构
type PageResult {
total: Int! # 总条数
list: [Activity!]! # 数据列表
}
# 比赛数据结构
type Activity {
id: ID!
name: String!
enrollEndTime: String! # 格式:yyyy-MM-dd HH:mm:ss
# 其他字段...
}
2. 变更操作(Mutation)
示例(新增比赛):
graphql
type Mutation {
# 新增比赛
createActivity(input: ActivityInput!): Activity!
}
# 输入参数结构
input ActivityInput {
name: String! # 校验:非空,长度≤30
enrollEndTime: String! # 校验:格式正确,且≥当前时间
startTime: String! # 校验:格式正确,且≥enrollEndTime
# 其他字段...
}
3. 权限控制
明确每个接口的访问角色,例如:
createActivity:仅管理员 / 平台角色可访问;
queryPlayerList:管理员可查看所有,评委仅能查看自己负责的比赛选手。
四、技术细节与约束(开发必备)
当前文档提到技术规范但不具体,需补充:
1. 数据校验规则
手机号:格式必须为1[3-9]\d{9};
日期时间:统一格式yyyy-MM-dd HH:mm:ss,后端需校验合法性(如月份≤12);
评分条目:单个条目得分≥0 且≤条目分值,所有条目总分≤模板总分。
2. 媒体资源处理
上传限制:图片≤5MB(格式:jpg/png),视频≤100MB(格式:mp4);
腾讯云存储路径:{targetType}/{yyyyMMdd}/{uuid}.ext(如activity_video/20250921/123e456-e89b-12d3-a456-426614174000.mp4);
访问 URL:https://{Bucket}.cos.{Region}.myqcloud.com/{路径}。
3. 异常处理
明确常见异常场景及处理方式,例如:
报名人数超限:抛出BusinessException("报名人数已达上限"),HTTP 状态码 400;
评分模板已关联比赛:删除时抛出BusinessException("模板已关联比赛,不可删除")。
4. 消息队列(RabbitMQ)
交换机 / 队列定义:例如审核通知队列ryc.exchange.notice,路由键notice.audit;
消息格式:
json
{
"type": "AUDIT_PASS", // 消息类型
"userId": 123, // 接收用户ID
"content": "您报名的XX比赛已通过审核",
"createTime": "2025-09-21 10:00:00"
}
五、前端交互关联(影响后端设计)
即使重点是后端开发,也需明确前端交互对后端的要求:
分页参数:默认页码 1,每页 10 条,支持前端自定义;
列表排序:默认按创建时间降序,支持按指定字段排序(如比赛时间);
批量操作:是否支持批量删除比赛、批量审核选手(需后端提供批量接口)。
六、边界场景与特殊规则
补充 “例外情况” 处理,例如:
比赛时间修改:若已有人报名,需判断新时间是否≥当前时间,且通知已报名学员;
评委更换:已打分的评委被移除后,其评分是否保留(规则:保留但不计入最终得分);
数据导出:是否需要支持导出比赛报名名单、评分结果(需明确导出字段和格式)。
通过以上细化,AI 可获得足够的「确定性信息」,生成的代码将更贴合需求,减少后期修改成本。核心原则是:让每个功能点都有明确的 “输入 - 处理 - 输出” 规则,每个字段都有清晰的约束。
蓉易创项目
一、重要提示(不可违反)
全程使用中文!
不要修改和你无关的代码!
数据库表结构已经设计好了,你可以通过jdbc 创建要给test 函数来访问数据库获取表结构!, 不要在命令行里面执行mysql ,我没有安装!!!
修改任何功能都先对应查询对应模块的功能要求!
所有新增、编辑页面都是公用一个页面。
每个实体类都有对应的 Input 类型:id=null 表示新增,id≠null 表示修改。
关联媒体资源规则:
user 关联的头像、activity 关联的视频 / 图片、carousel 关联的视频 / 图像,均对应 t_media 数据表(实体类:Media);
通过 Target 字段关联区分。
二、需求描述
学员登录小程序 → 点击报名并录入报名信息 → 工作人员审核报名资料 → 评委评审资料,按比赛对应评分表给学员打分并填写评论。
三、Web 端需求
3.1 登录页面
核心功能:支持「手机号 + 密码」登录;
预留功能:微信扫码登录入口。
3.2 登录后首页(标准工作台模板)
区域 内容描述
左侧菜单 包含「比赛管理」「评委管理」「评分模板」「参赛人员」「新闻与推广」「员工管理」
右侧工作区 展示核心数据:当前进行比赛、参赛总人数、报名待审核人数
3.3 比赛管理(实体类:Activity)
3.3.1 比赛列表
顶部功能:查询框(支持按「比赛名称」模糊查询)、【新增比赛】按钮;
列表字段:比赛名称、报名人数、比赛时间、报名截至时间;
操作列:查看选手、编辑、删除。
3.3.2 比赛详情
基础信息配置:
比赛名称(最大长度≤30 字符);
报名截至日期(日历组件选择);
比赛开始时间(精确到「年月日 时分」);
比赛地址、最大参赛人数、比赛描述;
关联配置:选择评分模板、上传视频 / 图片(参考「五、设计要点」)。
比赛阶段定义(重要):
数据关联:比赛阶段与比赛共用 t_activity 表,通过 pid 关联(父 ID 为比赛 ID);
阶段配置项:
阶段名称(最大长度≤30 字符);
阶段开始时间(精确到「年月日 时分」);
阶段地址、阶段最大参赛人数、阶段描述;
评分模板(默认继承比赛模板,支持单独选择);
阶段列表操作:查看选手、编辑、删除。
3.4 评委管理(实体类:Judge)
3.4.1 评委列表
展示字段:头像、评委名称、专业标签、联系电话、性别。
3.4.2 评委详情
基础信息:评委名称、头像、性别、联系电话;
标签配置:专业标签(支持多选,参考「五、设计要点 3」);
补充信息:评委详情描述。
3.5 评分模板管理(实体类:RatingScheme)
3.5.1 评分模板列表
展示字段:模板名称、模板总分。
3.5.2 评分模板详情
基础配置:模板名称;
条目管理:
支持「新增 / 删除」评分条目(已绑定比赛的模板不可删除);
条目字段:条目名称、条目分值。
3.6 学员管理(实体类:Player)
3.6.1 学员列表
展示字段:学员头像、学员名称、报名的比赛名称、申请时间。
3.6.2 学员详情
基础信息:学员名称、头像、联系电话;
参赛记录列表(1 个学员可报多个比赛):
展示字段:比赛名称、当前状态;
状态说明:0-删除、1-待审核、2-进行中(审核通过)、3-结束;
特殊规则:比赛结束后,「得分」「名次」不可修改。
3.7 新闻管理(实体类:Carousel)
3.7.1 新闻列表
展示字段:新闻名称、创建时间。
3.7.2 新闻播放设置(关联表:t_carousel_sort)
操作入口:列表查询按钮右侧 → 【设置播放】按钮;
设置页面:
顶部:新闻查询框;
下方:新闻列表,操作列支持「设置播放顺序」。
3.7.3 新闻详情
内容配置:新闻名称、新闻正文;
媒体配置:上传新闻关联的视频 / 图片;
播放配置:设置视频 / 图片的播放顺序。
3.8 权限角色
模型:采用标准 RBC(基于角色的访问控制)模型;
角色规则:内置 4 类角色(不可修改 / 编辑):学员、平台人员、评委、管理员。
3.9 专业标签管理(关联表:t_tag)
3.9.1 专业标签列表
支持功能:新增专业标签;
默认规则:新增标签的 code 与标签名称一致。
3.10 消息管理
功能:展示所有已发送的系统消息(含消息内容、发送时间、接收对象等)。
四、微信端需求
暂时留空
五、设计要点
列表通用规则:所有模块的列表页面,均需包含「查询」「新增」功能;
媒体资源存储(关联表:t_media):
覆盖场景:user 头像、player 头像、activity 视频 / 图片、activityPlayer 报名资料、judge 头像、employee 头像、carousel 视频 / 图片;
区分规则:通过 TargetType 枚举区分资源类型(需定义包含上述所有场景的枚举);
标签管理(表:t_tag):
区分规则:通过 category 字段区分标签类型(例:专业标签的 category = 'major')。
六、环境配置
开发环境:Windows 系统,命令行工具:PowerShell;
JDK 配置:Java 25,安装路径:C:\Program Files\Java\jdk-25。
使用环境变量里面的mave。
七、技术规范
7.1 目录规范
根目录按「端 / 模块」拆分,backend 内部按「业务模块」划分,结构如下:
plaintext
backend/src/main/java/com/rongyichuang/
├── config/ # 全局配置(RabbitMQ、GraphQL、跨域等)
├── judge/ # 评委模块
│ ├── api/ # GraphQL接口(如JudgeGraphqlApi.java)
│ ├── entity/ # 实体类(如Judge.java)
│ ├── dto/ # 数据传输对象(分request/response子目录)
│ ├── service/ # 业务逻辑(如JudgeService.java,无单独接口层)
│ └── util/ # 模块内工具类
├── rating/ # 评分模板模块(结构同judge)
├── activity/ # 比赛模块(结构同judge)
├── player/ # 参赛人员模块(结构同judge)
├── carousel/ # 轮播图(新闻)模块(结构同judge)
├── employee/ # 平台员工模块(结构同judge)
└── common/ # 公共模块
├── entity/ # 基础实体(如BaseEntity.java,含id/state)
├── dto/ # 公共DTO(如PageRequest.java)
├── exception/ # 全局异常处理(如GlobalExceptionHandler.java)
└── util/ # 全局工具类(如DateUtil.java)
7.2 GraphQL 配置
文件路径:resources/graphqls/;
命名规则:每个业务模块对应 1 个 graphqls 文件(例:评委模块 → judge.graphqls)。 业务模块的graphql里面query,Mutation都要extend scheme.graphqls ,不然会包重复的错误!
7.3 安全框架
采用 Spring Security + Token 实现身份认证与接口授权。
7.4 事务控制
作用范围:service 层核心业务方法(如评委评分、学员审核);
实现方式:添加 @Transactional 注解,确保数据一致性。
7.5 逻辑删除
通用规则:所有实体类含 state 字段(类型:int (1),默认值:1);
查询过滤:JPA 父接口添加 @Where(clause = "state = 1"),自动过滤已删除数据;
特殊说明:activityPlayer 的 state 含义与其他实体不同(参考 3.6.2 状态说明)。
7.6 云存储规范
存储目标:视频、图片上传至「腾讯云存储桶」;
目录规则:按「yyyyMMdd」(年月日)创建目录,当日资源存入对应目录。
八、资源信息
8.1 数据库连接(MySQL)
参数 配置值
类型 MySQL
IP 140.143.152.226
端口 3308
数据库名 ryc
用户名 openai
密码 Xml@uk2025
8.2 RabbitMQ 连接
yaml
rabbitmq:
host: 140.143.152.226
port: 5672
virtual-host: ryc_prod
username: admin
password: ycl@2020
connection-timeout: 15000
8.3 腾讯云存储(COS)
SecretId:AKIDZ4Pcj9zbgaZgl6yJf0HSXXHzfGl9PcdT
SecretKey:qjYFnCas0xseEdsxrsobKuJiwzrZ7dzC
Bucket:ryc-1256886520
Region:ap-chengdu 你基于这个再完善一下,细节
蓉易创项目(完善版)
一、重要提示(不可违反)
全程使用中文!
不要修改和你无关的代码!
数据库表结构获取方式:
因未安装 MySQL 命令行,需通过 JDBC 编写TestTableStructure函数查询表结构,具体实现如下(含依赖、代码示例、执行步骤):
依赖:在pom.xml中添加 MySQL JDBC 依赖(适配 MySQL 8.0+):
xml
mysql
mysql-connector-java
8.0.33
test
代码示例(位于test/java/com/rongyichuang/common/util/TestTableStructure.java):
java
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class TestTableStructure {
// 数据库连接信息(与文档8.1一致)
private static final String URL = "jdbc:mysql://140.143.152.226:3308/ryc?useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true";
private static final String USER = "openai";
private static final String PASSWORD = "Xml@uk2025";
// 需查询的表名(根据模块补充,如t_activity、t_judge)
private static final List TABLE_NAMES = List.of("t_activity", "t_judge", "t_rating_scheme", "t_media");
public static void main(String[] args) {
try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD)) {
for (String tableName : TABLE_NAMES) {
System.out.println("=== 表名:" + tableName + " ===");
// 查询表字段结构
String sql = "SELECT COLUMN_NAME, DATA_TYPE, COLUMN_COMMENT, IS_NULLABLE, COLUMN_DEFAULT " +
"FROM INFORMATION_SCHEMA.COLUMNS " +
"WHERE TABLE_SCHEMA = 'ryc' AND TABLE_NAME = ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, tableName);
ResultSet rs = pstmt.executeQuery();
while (rs.next()) {
System.out.printf("字段名:%s | 数据类型:%s | 注释:%s | 是否允许空:%s | 默认值:%s%n",
rs.getString("COLUMN_NAME"),
rs.getString("DATA_TYPE"),
rs.getString("COLUMN_COMMENT"),
rs.getString("IS_NULLABLE"),
rs.getString("COLUMN_DEFAULT"));
}
}
System.out.println(); // 换行分隔
}
} catch (SQLException e) {
e.printStackTrace();
System.err.println("查询表结构失败:" + e.getMessage());
}
}
}
执行步骤:在 PowerShell 中进入项目根目录,执行mvn test -Dtest=TestTableStructure,控制台输出表结构详情。
修改任何功能都先对应查询对应模块的功能要求!
所有新增、编辑页面都是公用一个页面。
每个实体类都有对应的Input类型:id=null表示新增,id≠null表示修改。
关联媒体资源规则:
user 关联的头像、activity 关联的视频 / 图片、carousel 关联的视频 / 图像,均对应t_media数据表(实体类:Media);
通过target_type(资源类型)和target_id(关联实体 ID)双字段区分,target_type枚举值见「五、设计要点 2」。
二、需求描述
学员登录小程序 → 选择目标比赛 → 填写报名信息 + 上传报名资料(关联t_media) → 工作人员(平台 / 管理员角色)审核报名资料 → 审核通过后,评委(仅指定比赛的评委)按关联评分模板打分 + 填写评论 → 比赛结束后,系统自动计算选手最终得分和名次(不可修改)。
三、Web 端需求(细化版)
3.1 登录页面
核心功能:
输入项:手机号(校验规则:11 位数字,匹配正则^1[3-9]\\d{9}$)、密码(校验规则:6-20 位,含数字 + 字母);
按钮:【登录】(点击后调用login接口,返回 Token 存入 LocalStorage)、【忘记密码】(预留,暂不实现);
预留功能:
微信扫码登录入口:显示微信扫码二维码(后端通过微信开放平台接口生成),扫码后回调wechatLoginCallback接口完成认证。
3.2 登录后首页(标准工作台模板)
区域 内容描述 补充细节
左侧菜单 包含「比赛管理」「评委管理」「评分模板」「参赛人员」「新闻与推广」「员工管理」 菜单权限控制:根据角色隐藏无权限项(如学员角色仅显示「新闻与推广」)
右侧工作区 展示核心数据:当前进行比赛、参赛总人数、报名待审核人数 数据实时性:每 5 分钟刷新一次;点击数据卡片跳转至对应列表页(如点击「待审核人数」跳转至参赛人员列表的「待审核」标签页)
3.3 比赛管理(实体类:Activity,对应表:t_activity)
3.3.1 比赛列表
顶部功能:
查询框:支持按「比赛名称」模糊查询(输入后实时过滤,或点击【查询】按钮触发);
【新增比赛】按钮:点击跳转至「比赛编辑页」(id=null);
列表字段:
字段名 展示格式 / 规则
比赛名称 超出 15 字符时显示省略号(hover 显示完整名称)
报名人数 格式:已报名X人/上限Y人(如 “已报名 23 人 / 上限 50 人”)
比赛时间 格式:yyyy-MM-dd HH:mm(如 “2024-10-01 09:00”)
报名截至时间 过期时标红(如当前时间 > 报名截至时间,文字颜色 #F53F3F)
操作列:
查看选手:跳转至「参赛人员列表」并筛选当前比赛的选手;
编辑:跳转至「比赛编辑页」(id=当前比赛ID);
删除:弹出确认弹窗(提示 “删除后不可恢复,是否确认?”),点击确认调用deleteActivity接口(仅管理员可操作)。
3.3.2 比赛详情(编辑页)
基础信息配置(表单项):
表单项 控件类型 校验规则
比赛名称 单行输入框 非空,长度≤30 字符,不允许包含特殊字符(`~!@#$%^&*()_+{} :"<>?`)
报名截至日期 日期时间选择器 非空,且≥当前时间,且≤比赛开始时间
比赛开始时间 日期时间选择器 非空,精确到「时分」(如 “2024-10-01 09:00”)
比赛地址 单行输入框 非空,长度≤255 字符
最大参赛人数 数字输入框 非空,≥1,≤9999
比赛描述 富文本编辑器 可为空,支持图片插入(插入的图片自动上传至 COS,路径rich_text/yyyyMMdd/)
评分模板 下拉选择框 非空,选项为所有状态正常的评分模板(t_rating_scheme.state=1)
媒体配置(上传区域):
视频上传:支持单个 MP4 格式视频(大小≤100MB),上传后显示预览图 + 删除按钮;
图片上传:支持多图上传(最多 5 张),格式 JPG/PNG(单张≤5MB),支持拖拽排序;
存储规则:上传后调用uploadMedia接口,媒体资源存入 COS 路径activity_media/yyyyMMdd/,并在t_media生成记录(target_type=ACTIVITY_MEDIA,target_id=比赛ID)。
比赛阶段定义(子表格):
显示当前比赛的所有阶段(t_activity.pid=当前比赛ID);
【新增阶段】按钮:点击弹出阶段编辑弹窗(默认继承比赛的评分模板、地址,可修改);
阶段表单项:与比赛基础信息一致(除 “报名截至日期”,阶段无需报名);
阶段操作列:查看选手(筛选当前阶段的选手)、编辑(弹窗修改)、删除(仅阶段未开始可删除)。
3.4 评委管理(实体类:Judge,对应表:t_judge)
3.4.1 评委列表
列表字段:
字段名 展示规则
头像 显示圆形头像(尺寸 40×40px),无头像时显示默认图标(路径/static/default-avatar.png)
评委名称 非空,超出 10 字符显示省略号
专业标签 多标签展示(如 “钢琴・声乐・作曲”),标签背景色 #E8F3FF,文字色 #1890FF
联系电话 脱敏显示(如 “138****5678”)
性别 显示图标(男:♂,女:♀)
操作列:编辑(跳转至评委编辑页)、删除(仅管理员可操作,需确认)。
3.4.2 评委详情(编辑页)
基础信息表单:
表单项 控件类型 校验规则
评委名称 单行输入框 非空,长度≤20 字符,不包含特殊字符
头像 图片上传控件 支持 JPG/PNG,大小≤2MB,上传后预览(路径judge_avatar/yyyyMMdd/)
性别 单选框 非空,选项 “男”“女”“保密”
联系电话 单行输入框 非空,匹配手机号正则^1[3-9]\\d{9}$
专业标签 标签选择器 非空,支持多选(选项来自t_tag表category='major'的标签)
评委详情 多行输入框 可为空,长度≤500 字符
关联比赛配置(多选框组):
选项:所有状态正常的比赛(t_activity.state=1且pid=0);
作用:指定评委可评审的比赛(仅关联的比赛可显示该评委并分配评分任务)。
3.5 评分模板管理(实体类:RatingScheme,对应表:t_rating_scheme;评分条目:RatingSchemeItem,对应表:t_rating_scheme_item)
3.5.1 评分模板列表
列表字段:
模板名称:非空,超出 15 字符显示省略号;
模板总分:格式 “XX 分”(如 “100 分”),由所有评分条目分值求和自动计算;
条目数量:格式 “XX 项”(如 “5 项”);
关联比赛数:显示当前模板已关联的比赛数量(如 “已关联 3 个比赛”,hover 显示比赛名称)。
操作列:
编辑:跳转至模板编辑页(若已关联比赛,“模板名称” 不可修改);
删除:仅未关联比赛的模板可删除(弹窗提示 “已关联比赛,不可删除”)。
3.5.2 评分模板详情(编辑页)
基础配置:
模板名称:单行输入框(已关联比赛时禁用),校验规则 “非空,长度≤20 字符”;
评分条目子表格:
列名 控件 / 规则
条目名称 单行输入框(新增 / 编辑时),非空,长度≤30 字符
条目分值 数字输入框(新增 / 编辑时),非空,≥1,≤100,且所有条目总分≤1000
操作 新增(点击【新增条目】添加行)、删除(仅未关联比赛的模板可删除条目)
总分计算:实时计算所有条目分值之和,显示在表格下方(如 “当前总分:100 分”)。
3.6 学员管理(实体类:Player,对应表:t_player;参赛记录:ActivityPlayer,对应表:t_activity_player)
3.6.1 学员列表
筛选条件(顶部标签页 + 查询框):
标签页:全部、待审核(state=1)、进行中(state=2)、已结束(state=3);
查询框:支持按 “学员名称”“报名比赛名称” 模糊查询;
列表字段:
字段名 展示规则
学员头像 圆形显示(40×40px),无头像显示默认图标
学员名称 超出 10 字符显示省略号
报名的比赛 显示比赛名称(超出 15 字符省略),若为阶段比赛,后缀 “-XX 阶段”(如 “校园歌手赛 - 初赛”)
申请时间 格式:yyyy-MM-dd HH:mm(如 “2024-09-15 14:30”)
当前状态 标签显示(待审核:#FF7D00;进行中:#00B42A;已结束:#86909C)
操作列:
查看详情:跳转至学员详情页;
审核:仅 “待审核” 状态显示(点击弹出审核弹窗,选择 “通过 / 拒绝” 并填写拒绝原因)。
3.6.2 学员详情页
基础信息卡片:
显示学员名称、头像、联系电话(脱敏)、报名总次数;
参赛记录列表(按报名时间倒序):
字段名 展示规则
比赛名称 点击可跳转至比赛详情页
报名时间 格式:yyyy-MM-dd HH:mm
当前状态 同列表页标签
报名资料 点击【查看】弹出弹窗,显示上传的资料(图片 / 文档,关联t_media)
得分 / 名次 已结束状态显示(得分:XX 分;名次:第 X 名,无名次显示 “未排名”)
评委评论 已结束状态显示(hover 显示所有评委的评论,格式 “评委 A:XXX;评委 B:XXX”)
3.7 新闻管理(实体类:Carousel,对应表:t_carousel;播放排序:CarouselSort,对应表:t_carousel_sort)
3.7.1 新闻列表
列表字段:
新闻名称:超出 20 字符显示省略号,点击跳转至新闻详情页;
封面图:显示缩略图(尺寸 120×80px),无封面图显示默认图;
创建时间:格式yyyy-MM-dd(如 “2024-09-01”);
播放状态:标签显示(已加入播放:#00B42A;未加入:#86909C)。
操作列:编辑、删除(仅管理员可操作)、【加入播放】/【移除播放】(切换播放状态)。
3.7.2 新闻播放设置
页面入口:新闻列表页查询框右侧【设置播放】按钮;
功能:
顶部查询框:按 “新闻名称” 模糊查询已加入播放的新闻;
排序列表:显示已加入播放的新闻(按播放顺序升序),每一行右侧有【上移】【下移】按钮(调整顺序)、【移除】按钮(从播放列表删除);
排序规则:播放顺序字段sort(int 类型,值越小越靠前,默认按加入时间排序)。
3.7.3 新闻详情(编辑页)
表单配置:
表单项 控件类型 校验规则
新闻名称 单行输入框 非空,长度≤50 字符
封面图 图片上传控件 非空,JPG/PNG,大小≤5MB,路径carousel_cover/yyyyMMdd/
新闻内容 富文本编辑器 非空,支持视频 / 图片插入(视频≤200MB,路径carousel_content/yyyyMMdd/)
媒体资源 视频 / 图片上传区 可选,支持多文件上传(视频≤500MB,图片≤10MB),用于详情页额外展示
播放顺序 数字输入框 可为空(加入播放时自动赋值,默认最大顺序 + 1)
3.8 权限角色(细化权限范围)
采用标准 RBAC 模型,内置 4 类不可修改的角色,权限范围如下表:
角色 可访问菜单 核心操作权限
学员 新闻与推广 查看新闻、小程序端报名比赛、查看个人参赛记录
平台人员 比赛管理、参赛人员、新闻与推广 编辑比赛 / 阶段、审核学员报名、管理新闻(不含删除)、查看评委 / 评分模板
评委 参赛人员(仅指定比赛) 查看指定比赛的学员资料、按评分模板打分 + 填写评论、查看评分结果
管理员 所有菜单 所有操作(含删除比赛 / 评委 / 模板、配置播放顺序、管理员工角色)
3.9 专业标签管理(对应表:t_tag)
3.9.1 专业标签列表
列表字段:
标签名称:非空,长度≤10 字符;
标签 Code:默认与标签名称一致(如名称 “钢琴”,Code “钢琴”),唯一不可修改;
关联评委数:显示当前标签已关联的评委数量(如 “关联 5 位评委”)。
操作列:
新增:点击【新增标签】弹出表单(输入标签名称,Code 自动生成,category='major');
删除:仅未关联评委的标签可删除(弹窗提示 “已关联评委,不可删除”)。
校验规则:新增标签时,校验 “标签名称 / Code 是否已存在”(避免重复)。
3.10 消息管理(实体类:Message,对应表:t_message)
列表字段(按发送时间倒序):
字段名 展示规则
消息类型 标签显示(审核通知:#FF7D00;评分通知:#00B42A;系统通知:#86909C)
消息内容 超出 30 字符显示省略号(hover 显示完整内容)
接收对象 格式:“学员:XXX”“评委:XXX”“所有人”
发送时间 格式:yyyy-MM-dd HH:mm
已读状态 未读标红(文字色 #F53F3F),已读正常(#1D2129)
操作列:
标记已读:点击将未读消息改为已读;
查看详情:弹出弹窗显示完整消息内容(含跳转链接,如审核通知跳转至学员详情页)。
消息发送规则:
审核通知:学员报名审核通过 / 拒绝时,自动发送给对应学员;
评分通知:评委完成评分后,自动发送给对应学员;
系统通知:管理员手动发送(新增 “发送系统消息” 表单,选择接收对象和内容)。
四、微信端需求(补充基础框架)
暂未实现,但需预留以下接口适配小程序:
学员登录接口(wechatMiniLogin):通过微信小程序 Code 获取 OpenID,关联t_player表;
比赛列表接口(miniActivityList):返回当前可报名的比赛(过滤已过期、已达人数上限的比赛);
报名接口(miniPlayerEnroll):接收学员 ID、比赛 ID、报名资料(媒体 ID),生成参赛记录;
个人中心接口(miniPlayerCenter):返回学员基本信息、参赛记录、消息列表。
五、设计要点(细化版)
列表通用规则:
分页:所有列表默认分页(页码默认 1,每页 10 条,支持切换 “10/20/50 条 / 页”);
排序:默认按 “创建时间
发消息或输入 / 选择技能